﻿using BookStore.Solution.Entities;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BookStore.Solution.BLL
{
    public class PromotionManager
    {
        private string result = "";
        private DataTable generateTable()
        {
            DataTable dtPromotion = new DataTable();
            dtPromotion.Columns.Add("PromotionID", typeof(string));
            dtPromotion.Columns.Add("PromotionName", typeof(string));
            dtPromotion.Columns.Add("StartDate", typeof(DateTime));
            dtPromotion.Columns.Add("EndDate", typeof(DateTime));
            dtPromotion.Columns.Add("Discount", typeof(int));
            dtPromotion.Columns.Add("Content", typeof(string));
            dtPromotion.Columns.Add("Status", typeof(string));
            return dtPromotion;
        }
        public DataTable GetAll()
        {
            DataTable dtPromotion = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listPromotion = from p in context.Promotions where p.Status == "Khả dụng" || p.Status == "Hết hiệu lực" select p;
                foreach (var row in listPromotion)
                {
                    dtPromotion.LoadDataRow(new object[] { row.PromotionID, row.PromotionName, row.StartDate.ToShortDateString(), row.EndDate.ToShortDateString(), row.Discount, row.Content, row.Status }, false);
                }
            }
            return dtPromotion;
        }
        public Promotion GetDetail(string promotionID)
        {
            Promotion promotion = null;
            using (var context = new BookStoreEntities())
            {
                try
                {
                    promotion = context.Promotions.Where(p => p.PromotionID == promotionID).FirstOrDefault<Promotion>();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            return promotion;
        }
        public string Insert(Promotion promotion)
        {
            using (var context = new BookStoreEntities())
            {
                int numOfRows = context.Promotions.Where(p => p.PromotionID == promotion.PromotionID).Count();
                if (numOfRows == 0)
                {
                    context.Promotions.Add(promotion);
                    if (context.SaveChanges() > 0)
                    {
                        SystemLogManager.Insert("Thêm khuyến mãi: " + promotion);
                        result = "Thêm thành công";
                    }
                    else
                        result = "Thêm thất bại";
                }
                else
                {
                    result = "Mã khuyến mãi đã tồn tại trong hệ thống. Vui lòng chọn mã khuyến mãi khác.";
                }
            }
            return result;
        }
        public string Update(Promotion promotion)
        {
            using (var context = new BookStoreEntities())
            {
                Promotion pro = (from p in context.Promotions where p.PromotionID == promotion.PromotionID select p).First();
                if (pro != null)
                {
                    pro.PromotionName = promotion.PromotionName;
                    pro.StartDate = promotion.StartDate;
                    pro.EndDate = promotion.EndDate;
                    pro.Discount = promotion.Discount;
                    pro.Content = promotion.Content;
                    pro.Status = promotion.Status;
                    if (context.SaveChanges() > 0)
                    {
                        SystemLogManager.Insert("Cập nhật khuyến mãi: " + promotion);
                        result = "Cập nhật thông tin khuyến mãi thành công";
                    }
                    else
                        result = "Cập nhật thông tin khuyến mãi thất bại";
                }
            }
            return result;
        }
        public string Delete(String promotionID)
        {
            using (var context = new BookStoreEntities())
            {
                Bill bill = context.Bills.Where(b => b.PromotionID == promotionID).FirstOrDefault<Bill>();
                if (bill == null)
                {
                    Promotion pro = (from p in context.Promotions where p.PromotionID == promotionID select p).First();
                    if (pro != null)
                    {
                        pro.Status = "Đã xóa";
                        if (context.SaveChanges() > 0)
                        {
                            SystemLogManager.Insert("Xóa khuyến mãi: " + pro);
                            result = "Xóa thông tin khuyến mãi thành công";
                        }
                        else
                            result = "Xóa thông tin khuyến mãi thất bại";
                    }
                }
                else
                {
                    result = "Khuyến mãi này đang được áp dụng cho các hóa đơn trong hệ thống không thể xóa";
                }
            }
            return result;
        }
        public DataTable SearchbyID(string promotionID)
        {
            DataTable dtPromotion = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listPromotion = from p in context.Promotions where (p.Status == "Khả dụng" || p.Status == "Hết hiệu lực") && p.PromotionID == promotionID select p;
                foreach (var row in listPromotion)
                {
                    dtPromotion.LoadDataRow(new object[] { row.PromotionID, row.PromotionName, row.StartDate.ToShortDateString(), row.EndDate.ToShortDateString(), row.Discount, row.Content, row.Status }, false);
                }
            }
            return dtPromotion;
        }
        public DataTable SearchbyName(string promotionName)
        {
            DataTable dtPromotion = generateTable();
            using (var context = new BookStoreEntities())
            {
                var listPromotion = from p in context.Promotions where p.PromotionName.Contains(promotionName) && (p.Status == "Khả dụng" || p.Status == "Hết hiệu lực") select p;
                foreach (var row in listPromotion)
                {
                    dtPromotion.LoadDataRow(new object[] { row.PromotionID, row.PromotionName, row.StartDate.ToShortDateString(), row.EndDate.ToShortDateString(), row.Discount, row.Content, row.Status }, false);
                }
            }
            return dtPromotion;
        }
        public DataTable SearchbyDate(string startDate, string endDate)
        {
            return null;
        }
    }
}
